[Hadoop] 分布式资源调度YARN 二

YARN资源调度流程(分步流程图、Yarn各个组件之间的心跳信号、Yarn资源隔离策略)、Yarn容错处理

Posted by 李玉坤 on 2017-07-05

YARN资源调度流程

  1. 用户向yarn提交一个作业
  2. RM为该作业分配第一个container(AM)
  3. RM会与对应的NM通信,要求NM在这个container上启动应用程序的AM
  4. AM首先向RM注册,然后AM将为各个任务申请资源,并监控运行情况;AM采用轮训的方式通过RPC协议向RM申请和领取资源;AM所需要的资源有多少个core有多个memory到RM进行申请,申请到后返回给AM
  5. AM申请到资源以后,便和相应的NM通信,要求NM启动任务,任务都是以Container方式运行的。
  6. NM启动我们作业对应的task;有几个task就启动几个Container
  7. 任务开始计算进入MapReduce阶段

分步流程图

1、client将程序打包提交到RM运行。

2、RM找一台空闲的机器启动一个Container,为了启动AM(一个Container启动一个AM)。

3、Container进而启动AM,每来一个作业都会启动一个AM

4、AM向RM汇报已到位,开始切分任务启动多少个map和reduce所需要的资源,封装成ResourceRequest对象来提交给RM;RM获取对象后并如果资源不够不会立刻给出所有资源,因为集群是繁忙的,当前可能只有20g的空闲内存,RM会慢慢收集其他作业释放的资源,直到100G。(如何解决这个等待策略,可以通过优先级来解决)

5、当RM把资源分配个AM的时候,当前的AM就可以启动当前任务;联系有空闲资源的nodemanager来完成任务;把请求封装到COntainerLaunchContext对象里传递给NodeManager。

6、NodeManager接受到请求之后就会把Container启动起来。

7、运行当前的Task

8、因为有若干个map,所以ApplicationMaster向空闲的NodeManager会继续申请资源。

9、task里运行的map还是reduce都是由AM来指挥的。

10、每个task会以心跳机制来向ApplicationMaster来汇报作业当前的运行情况。有特别情况会进行重启,或者进行全部作业重启,这些都是ApplicationMaster来管理的。

Yarn各个组件之间的心跳信号

  • Application Master与Resource Manager心跳
    • AM->RM
      • 对Container的资源需求(CPU和Memory)和优先级
      • 已用完等待回收的Container列表
    • RM->AM
      • 新申请到的Container
      • 已完成Container的状态
  • Application Master与Node Manager心跳
    • AM -> NM
      • 发起启动Container请求
    • NM -> AM
      • 汇报Container状态
  • Node Manager与Resource Manager心跳
    • NM->RM
      • Node Manager上所有的Container状态
    • RM->NM
      • 已删除和等待清理的Container列表

Yarn资源隔离策略

  • 内存资源隔离
    • 基于线程监控方案(优点:如果瞬间超过设定上限不会立马被kill掉)
    • 基于cgroups(linux里的资源轻量级方案,如果超过上限会立马被kill掉)
  • CPU资源隔离
    • 默认不对CPU资源进行隔离
    • 基于cgroups

Yarn容错处理

  • 失败类型
    • 程序失败 进程奔溃 硬件问题
  • 如果作业失败了
    • 作业异常均会汇报给Application Master
    • 通过心跳信号检查挂住的任务
    • 一个作业的任务失败比例超过配置,就会认为该任务失败
  • 如果Application Master失败了
    • Resource Manager接收不到心跳信号时会重启Application Master
  • 如果Node Manager失败了
    • Resource Manager接收不到心跳信号时会将其移出
    • Resource Manager通知Application Master,让Application Master决定任务如何处理
    • 如果某个Node Manager失败任务次数过多,Resource Manager调度任务时不再其上面运行任务
  • 如果Resource Manager运行失败
    • 通过checkpoint机制,定时将其状态保存到磁盘,失败的时候,重新运行
    • 通过Zookeeper同步状态和实现透明的HA